home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The 640 MEG Shareware Studio 2
/
The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO
/
clang
/
tcisam.zip
/
INXDEFS.H
< prev
next >
Wrap
Text File
|
1987-08-21
|
3KB
|
91 lines
/*
* INXDEFS.H - data definitions for all index modules
*
* Copyright (c) 1987, Jim Mischel
* Modifications:
*
* 08/13/87 - jim - original coding
*/
#define __INDEX__
/*#define FLOAT_KEY /* for float and double keys */
#include <stdio.h>
#include <io.h>
#include <alloc.h>
#include <mem.h>
#include <string.h>
#include "index.h"
#define fsize(f) filelength(fileno((f)))
/* index file record */
typedef struct {
long if_dat_ptr, /* pointer to data file record */
if_left_node, /* left descendent */
if_right_node, /* right descendent */
if_parent; /* there's got to be a better way!!! */
char if_flags; /* flags */
} inx_rec;
/* database control record */
typedef struct {
char *df_path; /* pathname (no extension) */
FILE *df_inx_file, /* index file */
*df_dat_file; /* data file */
inx_rec df_inx_buff; /* index file buffer */
inx_rec df_nxt_buff; /* buffer for read next/previous */
long df_nxt_ptr; /* pointer for read next/previous */
char *df_dat_buff; /* data file buffer */
unsigned df_rec_size; /* data record size */
int (*df_cmp)(); /* pointer to comparison routine */
char *df_key_ptr; /* pointer to key in data buffer */
unsigned df_key_offset; /* offset of key from beginning of record */
char df_flags; /* flags */
long df_inx_ptr; /* current index record */
long df_dat_ptr; /* current data record */
} df_rec;
#define RTHRD 0x01
#define LTHRD 0x02
#define ETHRD 0x04
#define BTHRD 0x08
#define DF_DUP 0x01
#define DF_EOF 0x02
#define DF_TOF 0x04
#define DF_START 0x08
#define DF_DELETE 0x10
/* internal support functions */
int isearch(df_rec *db_control, char *key);
int iget_next(df_rec *db_control, inx_rec *irec);
int iget_prev(df_rec *db_control, inx_rec *irec);
int iget_root(df_rec *db_control);
int iread_inx(df_rec *db_control, long seek_pos);
int iwrite_inx(df_rec *db_control, inx_rec *irec, long seek_pos);
int iread_dat(df_rec *db_control, long seek_pos);
int iwrite_dat(df_rec *db_control, void *datrec, long seek_pos);
int ierror(int e);
/* comparison routines */
int icmp_uchar(void *arg1, void *arg2);
int icmp_schar(void *arg1, void *arg2);
int icmp_uint(void *arg1, void *arg2);
int icmp_sint(void *arg1, void *arg2);
int icmp_ulong(void *arg1, void *arg2);
int icmp_slong(void *arg1, void *arg2);
int icmp_string(void *arg1, void *arg2);
#ifdef FLOAT_KEY
int icmp_float(void *arg1, void *arg2);
int icmp_double(void *arg1, void *arg2);
int (*icmp_rtns[])() = {icmp_uchar, icmp_schar, icmp_uint, icmp_sint,
icmp_ulong, icmp_slong, icmp_string, icmp_float,
icmp_double};
#else
int (*icmp_rtns[])() = {icmp_uchar, icmp_schar, icmp_uint, icmp_sint,
icmp_ulong, icmp_slong, icmp_string};
#endif